import request from '@/utils/request'

// 查询物料列表
export function listMaterial(query) {
  // 由于后端使用startPage()方法获取分页参数，必须以固定方式传递
  // 若依后端的startPage()使用pageNum和pageSize作为参数名称
  const pageNum = parseInt(query.pageNum) || 1;
  const pageSize = parseInt(query.pageSize) || 10;
  
  console.log("API方法收到分页参数: pageNum=" + pageNum + ", pageSize=" + pageSize);
  
  // 构建API请求参数
  const params = { ...query };
  
  // 处理模糊搜索参数
  // 根据SQL查询: wl.material_code like CONCAT('%',#{material_code},'%')
  if (query.material_code ) {
    console.log("处理模糊搜索参数:", {
      material_code: query.material_code,
    });
    
    // 确保前端参数名与后端一致
    if (query.materialCode && !query.material_code) {
      params.material_code = query.materialCode;
    }
    
   
  }
  
  // 处理物料类型参数
  // 根据SQL查询: wl.material_type=#{material_type}
  if (query.materialType && !query.material_type) {
    params.material_type = query.materialType;
    console.log("映射物料类型参数:", query.materialType, "->", params.material_type);
  }
  
  if (query.material_type) {
    console.log("使用物料类型过滤:", query.material_type);
  }
  
  // 处理单位参数
  // 根据SQL查询: wl.material_unit=#{material_unit}
  if (query.unit && !query.material_unit) {
    params.material_unit = query.unit;
    console.log("映射单位参数:", query.unit, "->", params.material_unit);
  }
  
  if (query.material_unit) {
    console.log("使用单位过滤:", query.material_unit);
  }
  
  // 根据SQL查询语句：
  // SELECT * from basic_wl wl inner join basic_wlflz lz on wl.material_subcategory_id=lz.material_subcategory_id
  // inner join basic_wlfl fl on lz.material_classification_id=fl.material_classification_id
  
  // 处理分类ID过滤条件 - 根据SQL查询需要使用不同的参数名
  // 1. 处理前端传入的categoryId (通用参数)
  if (query.categoryId) {
    // 从前端传入的参数判断是父分类还是子分类ID
    if (query.material_subcategory_id) {
      // 如果指定了子分类ID，优先使用子分类ID进行过滤
      // 根据SQL查询，这里需要设置为basicWlflz.material_subcategory_id
      params.basicWlflz = {
        material_subcategory_id: query.material_subcategory_id
      };
      // 同时保留原始参数，以确保兼容性
      params.material_subcategory_id = query.material_subcategory_id;
      console.log("使用子分类ID过滤:", params.material_subcategory_id);
    } else if (query.material_classification_id) {
      // 如果指定了父分类ID，使用父分类ID进行过滤
      // 根据SQL查询，这里需要设置为basicWlfl.material_classification_id
      params.basicWlfl = {
        material_classification_id: query.material_classification_id
      };
      // 同时保留原始参数，以确保兼容性
      params.material_classification_id = query.material_classification_id;
      console.log("使用父分类ID过滤:", params.material_classification_id);
    } else {
      // 如果没有明确指定类型，默认作为父分类ID处理
      params.basicWlfl = {
        material_classification_id: query.categoryId
      };
      params.material_classification_id = query.categoryId;
      console.log("使用默认父分类ID过滤:", params.material_classification_id);
    }
    
    // 移除前端特定的参数，避免后端解析错误
    delete params.categoryId;
  } 
  // 2. 直接处理material_subcategory_id (子分类ID)
  else if (query.material_subcategory_id) {
    // 根据SQL查询，这里需要设置为basicWlflz.material_subcategory_id
    params.basicWlflz = {
      material_subcategory_id: query.material_subcategory_id
    };
    console.log("直接使用提供的子分类ID:", query.material_subcategory_id);
  } 
  // 3. 直接处理material_classification_id (父分类ID)
  else if (query.material_classification_id) {
    // 根据SQL查询，这里需要设置为basicWlfl.material_classification_id
    params.basicWlfl = {
      material_classification_id: query.material_classification_id
    };
    console.log("直接使用提供的父分类ID:", query.material_classification_id);
  }
  
  // 如果有分类名称，添加到请求参数中，但这可能不是SQL查询中使用的主要过滤条件
  if (query.material_fl) {
    params.material_fl = query.material_fl;
    console.log("设置分类名称过滤条件:", params.material_fl);
  }
  
  // 移除可能导致问题的参数
  delete params.pageNum;
  delete params.pageSize;
  // 移除前端特有的参数，避免后端解析错误
  delete params.materialCode;
  delete params.materialName;
  delete params.materialType;
  delete params.unit;
  
  console.log("API方法构建的请求参数:", JSON.stringify(params));
  
  // 使用若依框架的正确参数名称
  // 使用URL参数方式传递分页参数，避免与请求体冲突
  return request({
    url: '/ldzl-basic/wlgl/list',
    method: 'post',
    // 必须添加params参数，而不是放在data中，因为startPage()会从params中获取分页信息
    params: {
      pageNum: pageNum,
      pageSize: pageSize
    },
    // 业务数据保持在body中
    data: params
  })
}



// 新增物料
export function addMaterial(data) {
  return request({
    url: '/ldzl-basic/wlgl',
    method: 'post',
    data: data
  })
}

// 修改物料
export function updateMaterial(data) {
  return request({
    url: '/ldzl-basic/wlgl',
    method: 'put',
    data: data
  })
}

// 删除物料
export function deleteMaterial(id) {
  return request({
    url: '/ldzl-basic/wlgl/dp/' + id,
    method: 'put'
  })
}



// 查询所有分类
export function listAllParentCategories() {
  return request({
    url: '/ldzl-basic/wlfl/find',
    method: 'post'
  })
} 


// 查询物料分类列表
export function listMaterialCategory(data) {
  // 确保请求参数与后端API需求一致
  const queryParams = {};
  
  // 添加关键字搜索条件
  if (data.keyword) {
    queryParams.material_classification_code = data.keyword;
  }
//   if (data.material_classification_name) {
//     queryParams.material_classification_name = data.keyword;
//   }
  
  
  // 打印参数调试
  console.log('发送至后端的查询参数:', queryParams);
  
  return request({
    url: '/ldzl-basic/wlflz/find',
    method: 'post',
    data: queryParams
  })
}

// 查询所有可用单位
export function listAllUnits() {
  return request({
    url: '/ldzl-basic/units/find',
    method: 'get',
    timeout: 10000, // 设置10秒超时
    headers: {
      'Cache-Control': 'no-cache' // 避免缓存问题
    }
  }).catch(error => {
    console.error("获取单位列表失败:", error);
    // 返回一个被拒绝的Promise，让调用者能够捕获错误
    return Promise.reject(error);
  });
}

// 根据物料id查询
export function getMaterialById(id) {
  return request({
    url: '/ldzl-basic/wlgl/'+id,
    method: 'get'
  })
} 




